Let $X$ be a simplicial complex, and let $n \in \NN$. The n-fold product $X^n$ is filtered by $(x_1, ..., x_n) \mapsto |\{x_1, ..., x_n\}|-1$, one less than the number of unique points of $X$ that appear in an $n$-tuple. We compute the resulting homology spectral sequence.
First, give the n and facets of $X$.
i1 : n = 2; |
i2 : facets = {{1,2},{1,3},{2,3}};
|
Now we compute the dimension and a list of all the faces.
i3 : d = -1 + max apply(facets, f -> #f); |
i4 : faces = k -> unique flatten apply(facets, f -> subsets(f, k)); |
i5 : ff = flatten apply(2 + d, faces); |
The next functions build the product complex.
i6 : nextsteps = f -> select(unique flatten select(facets, g -> isSubset(f, g)), v -> #f == 0 or v >= last f); |
i7 : pe = mat -> (
q := numrows mat;
nxts := apply(q, r -> nextsteps unique first entries mat^{r});
prod := apply(fold((a,b)->a**b,nxts), flatten);
ret := {mat};
for p in prod do (
col := map(ZZ^q,ZZ^1,apply(p,v->{v}));
if numcols mat == 0 or col != mat_{-1 + numcols mat} then (
ret = ret | pe(mat | col);
);
);
ret
);
|
i8 : cs = m -> apply(numcols m, c -> m_{c});
|
i9 : prod = apply(pe(map(ZZ^n,ZZ^0,{})),cs)
o9 = {{}, {| 1 |}, {| 1 |, | 2 |}, {| 1 |, | 2 |, | 2 |}, {| 1 |, | 2 |, | 2
| 1 | | 1 | | 1 | | 1 | | 1 | | 2 | | 1 | | 1 | | 3
------------------------------------------------------------------------
|}, {| 1 |, | 3 |}, {| 1 |, | 3 |, | 3 |}, {| 1 |, | 3 |, | 3 |}, {| 1
| | 1 | | 1 | | 1 | | 1 | | 2 | | 1 | | 1 | | 3 | | 1
------------------------------------------------------------------------
|, | 1 |}, {| 1 |, | 1 |, | 2 |}, {| 1 |, | 1 |, | 3 |}, {| 1 |, | 2 |},
| | 2 | | 1 | | 2 | | 2 | | 1 | | 2 | | 2 | | 1 | | 2 |
------------------------------------------------------------------------
{| 1 |, | 3 |}, {| 1 |, | 1 |}, {| 1 |, | 1 |, | 2 |}, {| 1 |, | 1 |, |
| 1 | | 2 | | 1 | | 3 | | 1 | | 3 | | 3 | | 1 | | 3 | |
------------------------------------------------------------------------
3 |}, {| 1 |, | 2 |}, {| 1 |, | 3 |}, {| 2 |}, {| 2 |, | 3 |}, {| 2 |, |
3 | | 1 | | 3 | | 1 | | 3 | | 1 | | 1 | | 1 | | 1 | |
------------------------------------------------------------------------
3 |, | 3 |}, {| 2 |, | 3 |, | 3 |}, {| 2 |, | 2 |}, {| 2 |, | 2 |, | 3
1 | | 2 | | 1 | | 1 | | 3 | | 1 | | 2 | | 1 | | 2 | | 2
------------------------------------------------------------------------
|}, {| 2 |, | 3 |}, {| 2 |, | 2 |}, {| 2 |, | 2 |, | 3 |}, {| 2 |, | 3
| | 1 | | 2 | | 1 | | 3 | | 1 | | 3 | | 3 | | 1 | | 3
------------------------------------------------------------------------
|}, {| 3 |}, {| 3 |, | 3 |}, {| 3 |, | 3 |}, {| 1 |}, {| 1 |, | 2 |}, {|
| | 1 | | 1 | | 2 | | 1 | | 3 | | 2 | | 2 | | 2 | |
------------------------------------------------------------------------
1 |, | 2 |, | 2 |}, {| 1 |, | 3 |}, {| 1 |, | 3 |, | 3 |}, {| 1 |, | 1
2 | | 2 | | 3 | | 2 | | 2 | | 2 | | 2 | | 3 | | 2 | | 3
------------------------------------------------------------------------
|}, {| 1 |, | 1 |, | 2 |}, {| 1 |, | 1 |, | 3 |}, {| 1 |, | 2 |}, {| 1
| | 2 | | 3 | | 3 | | 2 | | 3 | | 3 | | 2 | | 3 | | 2
------------------------------------------------------------------------
|, | 3 |}, {| 2 |}, {| 2 |, | 3 |}, {| 2 |, | 3 |, | 3 |}, {| 2 |, | 2
| | 3 | | 2 | | 2 | | 2 | | 2 | | 2 | | 3 | | 2 | | 3
------------------------------------------------------------------------
|}, {| 2 |, | 2 |, | 3 |}, {| 2 |, | 3 |}, {| 3 |}, {| 3 |, | 3 |}, {| 1
| | 2 | | 3 | | 3 | | 2 | | 3 | | 2 | | 2 | | 3 | | 3
------------------------------------------------------------------------
|}, {| 1 |, | 2 |}, {| 1 |, | 3 |}, {| 2 |}, {| 2 |, | 3 |}, {| 3 |}}
| | 3 | | 3 | | 3 | | 3 | | 3 | | 3 | | 3 | | 3 |
o9 : List
|
We compute the dimension of $X^n$, and check that it matches $n * d$:
i10 : pd = -1 + max apply(prod, f -> #f); |
i11 : assert(pd == n * d) |
Now we build the intended filtration, which we compute by counting the number of unique rows in a matrix.
i12 : filt = f -> (
m = fold((a,b)->a|b,f);
urows = unique apply(numrows m, r -> m^{r});
-1 + #urows
);
|
Now comes the hard computational work. We generate the faces of $X^n$, build the chain groups, compute the differentials, and return a module $M$ that encodes the filtered complex.
i13 : R = ZZ[t]; |
i14 : prodfaces = apply(1 + pd, k -> select(prod, f -> #f - 1 == k)); |
i15 : chains = apply(1+pd,k->R^(-apply(prodfaces#k, filt))); |
i16 : omega = (a,b)->if isSubset(a,b) then (-1)^(position(b, v->not member(v,a))) * t^(filt(b)-filt(a)) else 0; |
i17 : diffs = apply(pd,k->map(chains#k, chains#(k+1), matrix table(prodfaces#k,prodfaces#(k+1),omega))); |
i18 : cx = chainComplex diffs; |
i19 : sm = sequenceModule(R[D,Degrees=>{{-1}}]/D^2,(reverse diffs) | {map(R^{}, first chains, {})});
|
i20 : sm = sm ** (ring sm)^{{-pd,0}};
|
i21 : smm = restackModule({2,1},sm);
|
i22 : M = prune restackModule({1,1},smm);
|
From here, we build the exact couple and plot the frist two pages of the spectral sequence:
i23 : couple = prune exactCouple M;
warning: clearing value of symbol t to allow access to subscripted variables based on it
: debug with expression debug 5504 or with command line option --debug 5504
|
i24 : plotPages((-1..(pd+1),-1..n,1..2), prune @@ evaluateInDegree, couple)
warning: clearing value of symbol e to allow access to subscripted variables based on it
: debug with expression debug 3903 or with command line option --debug 3903
warning: clearing value of symbol t to allow access to subscripted variables based on it
: debug with expression debug 5504 or with command line option --debug 5504
page 1, with differential of degree {-1, -1}:
+----++----+---+---+---+---+
|q=2 ||0 |0 |0 |0 |0 |
+----++----+---+---+---+---+
| || | | 1| 1| |
|q=1 ||0 |0 |ZZ |ZZ |0 |
+----++----+---+---+---+---+
| || | 1| 1| | |
|q=0 ||0 |ZZ |ZZ |0 |0 |
+----++----+---+---+---+---+
|q=-1||0 |0 |0 |0 |0 |
+----++----+---+---+---+---+
| ||p=-1|p=0|p=1|p=2|p=3|
+----++----+---+---+---+---+
page 2, with differential of degree {-1, -2}:
+----++----+---+---+---+---+
|q=2 ||0 |0 |0 |0 |0 |
+----++----+---+---+---+---+
| || | | 1| 1| |
|q=1 ||0 |0 |ZZ |ZZ |0 |
+----++----+---+---+---+---+
| || | 1| 1| | |
|q=0 ||0 |ZZ |ZZ |0 |0 |
+----++----+---+---+---+---+
|q=-1||0 |0 |0 |0 |0 |
+----++----+---+---+---+---+
| ||p=-1|p=0|p=1|p=2|p=3|
+----++----+---+---+---+---+
|